import { getLocation, defaultFail } from '@/utils/wechat.jssdk';

let longitude = null as number;
let latitude = null as number;

let lastTime = 0;

function getCoordinates(callback = (coordinates) => { }) {
  // #ifdef H5
  function success(res: any) {
    latitude = Number.parseFloat(res.latitude);
    longitude = Number.parseFloat(res.longitude);
    callback({ longitude, latitude });
  }
  function fail() {
    // TODO
    setTimeout(() => {
      uni.getLocation({
        type: 'gcj02',
        altitude: true,
        success(res: any) {
          latitude = Number.parseFloat(res.latitude);
          longitude = Number.parseFloat(res.longitude);
          callback({ longitude, latitude });
        },
      });
    }, 500);
  }
  getLocation(success, defaultFail('getLocation', fail));
  // #endif

  // #ifndef H5
  uni.getLocation({
    type: 'gcj02',
    altitude: true,
    success: function(res) {
      longitude = res.longitude;
      latitude = res.latitude;
      callback({ longitude, latitude });
    },
    fail: function(res) {
      // TODO
      console.log(JSON.stringify(res) + '获取位置失败');
    },
  });
  // #endif
}

function toGetCoordinates(callback = (coordinates: { longitude: number; latitude: number }) => { }) {
  if (lastTime === 0) {
    getCoordinates(callback);
    let timer = setInterval(() => {
      lastTime++
      if (lastTime > 59) {
        clearInterval(timer);
        lastTime = 0
      }
    }, 1000);
  } else {
    if (0 < lastTime || lastTime < 59) {
      callback({ latitude, longitude });
    } else {
      getCoordinates(callback);
    }
  }
}

export { toGetCoordinates };
